home *** CD-ROM | disk | FTP | other *** search
/ Revolution - Das Atari CD Magazin 1997 / Revolution - Das Atari CD Magazin 1.iso / software / anwendng / qed_397 / sourcen / seproto.h < prev    next >
Text File  |  1997-01-08  |  12KB  |  305 lines

  1. /* SE-Protokoll zur Kommunikation zwischen Shells zur Programmentwicklung
  2.  * und Editoren.
  3.  *
  4.  * Dieses Protokoll dient dazu, unter Multitasking-Systemen die Shell
  5.  * zur Compilierung und ähnlichen Sachen zu veranlassen, und um Fehler-
  6.  * meldungen und/oder Fehlerdateien an den Editor zurückzugeben.
  7.  *
  8.  * Kommandos bzw. Nachrichten von der Shell zum Editor beginnen
  9.  * mit SE_, Nachrichten vom Editor zur Shell beginnen mit ES_
  10.  *
  11.  * Da teilweise Zeiger auf Speicherbereiche übergeben werden, ist vom
  12.  * jeweiligen Absender der Nachricht darauf zu achten, daß diese
  13.  * Speicherbereiche vom Empfänger auch lesbar sind (Memory Protection!).
  14.  * Dafür sind diese als Readable zu allozieren!
  15.  *
  16.  */
  17.  
  18. #define SEPROTOVERSION 0x104  /* Die Versionsnummer des Protokolls.
  19.                                * Highbyte ist die Major Number
  20.                                * Lowbyte ist die Lower Number
  21.                                */
  22.  
  23. /*
  24.  * Erweiterungen
  25.  *
  26.  * Datum    Version Änderungen
  27.  *
  28.  * 30.01.96  1.01   SE_CLOSE für Dateien/Masken, mit Close-Flag
  29.  *                    msg[5] = 0 -> nur sichern
  30.  *                    msg[5] = 1 -> sichern + schließen
  31.  *                  ES/SE_PROJEKT mit leerem Argument (NULL)
  32.  *                  Um zur Version 0x100 kompatibel zu sein, sollte
  33.  *                  das Programm die Versionsnummer überprüfen!!
  34.  *
  35.  * 13.08.96  1.02   SE_OPEN mit Zeilen- und Spaltennummer
  36.  *                  neue Nachricht SE_MENU
  37.  *
  38.  * 19.11.96  1.03   bei ES_COMPILE kann der Dateiname auch NULL sein
  39.  *
  40.  * 08.01.97  1.04      SE_CLOSE: Flag 2
  41.  *                  SE_MENU: progName
  42.  */
  43.  
  44.  
  45. #define SE_INIT         0x4200
  46.     /* Die Shell fragt an, ob ein Editor das SE-Protokoll
  47.      * versteht.
  48.      * Wort 3: Ein Bitset, welche Nachrichten die Shell versendet
  49.      * Wort 4+5: Ein Bitset, welche Editorkommandos verstanden werden
  50.      * Wort 6: Unterstütze Versionsnummer des Protokolls
  51.      * Als Antwort erhält es ein ES_OK vom  Editor.
  52.      */
  53.  
  54. #define SE_OK           0x4201
  55.     /* Die Shell sagt dem Editor, das sie das Protokoll
  56.      * versteht.
  57.      * Wort 3: Ein Bitset, welche Nachrichten die Shell versendet
  58.      * Wort 4+5: Ein Bitset, welche Editorkommandos verstanden werden
  59.      * Wort 6: Unterstütze Versionsnummer des Protokolls
  60.      * Wort 7: Die ApId des Programmes, dessen Nachricht beantwortet wird
  61.      */
  62.  
  63. #define SE_ACK          0x4202
  64.     /* Die Shell bestätigt den Empfang eines Editorkommandos und gibt zurück,
  65.      * ob das Kommando ausgeführt wird.
  66.      * Wort 3: TRUE: Kommando wird verstanden und ausgeführt.
  67.      *         FALSE: Das Kommando wird nicht verstanden
  68.      * Eine SE_ACK mit TRUE sagt nichts darüber aus, ob das Kommando erfolg-
  69.      * reich ausgeführt wurde. Es sagt nur, daß die Shell das Kommando
  70.      * versteht und ausführen wird!
  71.      */
  72.  
  73. #define SE_OPEN         0x4203
  74.     /* Die Shell sagt dem Editor, daß er einen Text öffnen
  75.      * soll. Als Antwort erhält die Shell ein ES_ACK
  76.      * Wort 3+4: Ein Zeiger auf den Filenamen des zu öffnenden Files
  77.      * Wort 5+6: Cursorposition (Zeilennummer)
  78.      * Wort 7  : Cursorposition (Spaltennummer)
  79.      */
  80.  
  81. #define SE_ERROR        0x4204
  82.     /* Es ist ein Fehler beim Compilieren aufgetreten.
  83.      * Wort 3+4: Ein Zeiger auf eine Infostruktur, die wie folgt
  84.      *           aufgebaut ist:
  85.      *              Wort 0+1: Ein Zeiger auf den Namen des compilierten Textes.
  86.      *              Wort 2+3: Ein Zeiger auf den Text der Fehlermeldung
  87.      *              Wort 4  : Die Fehlernummer
  88.      *              Wort 5+6: Die fehlerhafte Zeile
  89.      *              Wort 7  : Die Spalte mit dem Fehler (oder 0)
  90.      * Mit ES_ACK bestätigt der Editor die Meldung.
  91.      */
  92.  
  93. #define SE_ERRFILE      0x4205
  94.     /* Es sind Fehler aufgetreten. Die Fehlermeldungen stehen in einem
  95.      * Errorfile, welches in der Message spezifiziert wird.
  96.      * Wort 3+4: Ein Zeiger auf den Filenamen des Errorfiles mit den
  97.      *           Fehlermeldungen
  98.      * Wort 5+6: Ein Zeiger auf den Namen des compilierten Textes
  99.      * Mit ES_ACK bestätigt der Editor die Meldung.
  100.      */
  101.  
  102. #define SE_PROJECT      0x4206
  103.     /* Die Shell teilt dem Editor mit, daß das Projekt geändert wurde.
  104.      * Der Filename des aktuellen Projektfiles wird als Parameter übergeben
  105.      * Wird NULL übergeben, sollte das aktuelle Projekt abgemeldet werden.
  106.      * Wort 3+4: Ein Zeiger auf den Namen des Projektfiles oder NULL
  107.      * Der Editor bestätigt mit ES_ACK.
  108.      * Eine vernünftige Reaktion des Editors wäre es in dem Fall,
  109.      * ebenfalls das Projekt zu wechseln, sofern er diese unterstützt.
  110.      */
  111.  
  112. #define SE_QUIT         0x4207
  113.     /* Die Shell teilt dem Editor mit, daß sie jetzt beendet wird.
  114.      * Der Editor sollte in dem Fall die Shell als Kommunikationspartner
  115.      * vergessen.
  116.      * Parameter gibt es keine.
  117.      * Es wird keine Antwort erwartet!
  118.      */
  119.  
  120. #define SE_TERMINATE      0x4208
  121.     /* Die Shell teilt dem Editor mit, daß dieser sich beenden soll.
  122.      * Der Editor sollte in dem Fall sich selbst beenden und seinen ganz
  123.      * normalen Terminierungsprozeß durchlaufen (und in dem auch ein ES_QUIT
  124.      * schicken!). Der Grund für so eine Meldung der Shell könnte zum Beispiel
  125.      * zu wenig Speicher zum compilieren sein.
  126.      * Mit ES_ACK bestätigt der Editor die Meldung.
  127.      */
  128.  
  129. #define SE_CLOSE          0x4209
  130.     /* Die Shell teilt dem Editor mit, daß dieser bestimmte Texte sichern
  131.      * bzw. schließen soll. Beim Schließen von geänderten Texten sollte der
  132.      * Editor vorher nachfragen.
  133.      * Wort 3+4: Ein Zeiger auf den Namen einer Datei oder eine Dateimaske.
  134.      *           '*.*' steht für alle Textfenster (entspricht also dem SE_CLOSE
  135.      *           der Protokoll-Version 0x100).
  136.      * Wort 5  : 0 = nur sichern
  137.      *           1 = sichern und schließen
  138.      *           2 = schließen ohne sichern
  139.      * Mit ES_ACK bestätigt der Editor die Meldung.
  140.      */
  141.  
  142. #define SE_MENU         0x420A
  143.     /* Die Shell teilte dem Editor mit, was er für die einzelnen Programme
  144.      * in sein Menü eintragen soll.
  145.      *
  146.      * Word 3+4: Ein Zeiger auf eine SEMENUINFO-Struktur mit den Einträgen.
  147.      * Mit ES_ACK bestätigt der Editor die Meldung.
  148.      */
  149.  
  150.  
  151. #define ES_INIT         0x4240
  152.     /* Ein Editor fragt an, ob eine Shell das SE-Protokoll versteht.
  153.      * Wort 3: Ein Bitset, welche Shellnachrichten verstanden werden
  154.      * Wort 4+5: Ein Bitset, welche Editorkommandos versendet werden
  155.      * Wort 6: Unterstütze Versionsnummer des Protokolls
  156.      * Als Antwort erhält es SE_OK von der Shell
  157.      */
  158.  
  159. #define ES_OK           0x4241
  160.     /* Der Editor beantwortet die Anfrage der Shell nach dem Protokoll.
  161.      * Wort 3: Ein Bitset, welche Shellnachrichten verstanden werden
  162.      * Wort 4+5: Ein Bitset, welche Editorkommandos versendet werden
  163.      * Wort 6: Unterstütze Versionsnummer des Protokolls
  164.      * Wort 7: Die ApId des Programmes, dessen Nachricht beantwortet wird
  165.      */
  166.  
  167. #define ES_ACK          0x4242
  168.     /* Der Editor bestätigt den Empfang des Kommandos
  169.      * Wort 3: TRUE: Kommando wird verstanden und ausgeführt.
  170.      *         FALSE: Das Kommando wird nicht verstanden
  171.      * Eine ES_ACK mit TRUE sagt nichts darüber aus, ob das Kommando erfolg-
  172.      * reich ausgeführt wurde. Es sagt nur, daß der Editor das Kommando
  173.      * versteht und ausführen wird!
  174.      */
  175.  
  176. #define ES_COMPILE      0x4243
  177.     /* Der Editor sagt der Shell, daß sie ein File übersetzen soll.
  178.      * Ein Pointer auf den Dateinamen wird in der Message übergeben.
  179.      * Wort 3+4: Zeiger auf den Namen der zu compilierenden Datei
  180.      *           (oder NULL).
  181.      * Diese Nachricht muß mit SE_ACK bestätigt werden.
  182.      */
  183.  
  184. #define ES_MAKE         0x4244
  185.     /* Der Editor sagt der Shell, daß sie ein Make ausführen soll.
  186.      * Ein Filename kann in der Message übergeben werden, muß aber
  187.      * nicht gesetzt sein und muß von der Shell auch nicht beachtet
  188.      * werden!
  189.      * Wort 3+4: Zeiger auf den Namen des Makefiles (oder NULL)
  190.      * Die Shell bestätigt mit SE_ACK.
  191.      */
  192.  
  193. #define ES_MAKEALL      0x4245
  194.     /* Der Editor sagt der Shell, daß ein komplettes Make All ausgeführt
  195.      * werden soll. Ein Filename für das Makefile kann (muß nicht) in
  196.      * der Message übergeben werden.
  197.      * Wort 3+4: Zeiger auf den Namen des Makefiles (oder NULL)
  198.      * Die Shell bestätigt mit SE_ACK.
  199.      */
  200.  
  201. #define ES_LINK         0x4246
  202.     /* Der Editor sagt der Shell, daß das Programm
  203.      * gelinkt werden soll. Ein Filename kann
  204.      * in der Message übergeben werden, muß aber
  205.      * nicht unbedingt beachtet werden von der Shell!
  206.      * Wort 3+4: Zeiger auf den Namen der Source, die gelinkt werden soll
  207.      *           (oder NULL)
  208.      * Die Shell bestätigt mit SE_ACK.
  209.      */
  210.  
  211. #define ES_EXEC         0x4247
  212.     /* Der Editor sagt der Shell, daß das Programm
  213.      * zu der Source ausgeführt werden soll. Ein
  214.      * Filename kann übergeben werden, muß von der
  215.      * Shell aber nicht beachtet werden.
  216.      * Wort 3+4: Zeiger auf den Namen des auszuführenden Files (oder NULL)
  217.      *           Bei einer Sourcedatei ist diese ggf. noch zu
  218.      *           compilieren und/oder zu linken
  219.      * Die Shell bestätigt mit SE_ACK.
  220.      */
  221.  
  222. #define ES_MAKEEXEC     0x4248
  223.     /* Die Shell soll ein Make ausführen und danach das Programm ausführen.
  224.      * Ein Filename für das Makefile kann (muß nicht) in der Message
  225.      * übergeben werden.
  226.      * Wort 3+4: Zeiger auf den Namen des Makefiles (oder NULL)
  227.      * Die Shell bestätigt mit SE_ACK.
  228.      */
  229.  
  230. #define ES_PROJECT      0x4249
  231.     /* Der Editor teilt der Shell mit, daß das Project geändert/gewechselt
  232.      * wurde. Der Filename des  Projektfiles wird als Parameter in der Message
  233.      * übergeben. Wird NULL übergeben, sollte das aktuelle Projekt abgemeldet
  234.      * werden.
  235.      * Wort 3+4: Zeiger auf den Namen des Projektfiles oder NULL.
  236.      * Die Shell bestätigt mit SE_ACK.
  237.      * Eine vernünftige Reaktion der Shell wäre in dem Fall, ebenfalls
  238.      * das Projekt zu wechseln, sofern sie diese unterstützt.
  239.      */
  240.  
  241. #define ES_QUIT         0x424A
  242.     /* Der Editor teilt der Shell mit, daß er jetzt beendet wird.
  243.      * Die Shell sollte in dem Fall den Editor als Kommunikationspartner
  244.      * vergessen.
  245.      * Parameter gibt es keine.
  246.      * Es wird keine Antwort erwartet!
  247.      */
  248.  
  249. /* Typdefinitionen für die Nachrichten */
  250.  
  251. /* Dies definiert die einzelnen Bits, welche Nachrichten unterstützt werden */
  252.  
  253. /* Shell-Kommandos
  254.  */
  255. #define _SEINIT      0x0001
  256. #define _SEOK        0x0002
  257. #define _SEACK       0x0004
  258. #define _SEOPEN      0x0008
  259. #define _SEERROR     0x0010
  260. #define _SEERRFILE   0x0020
  261. #define _SEPROJECT   0x0040
  262. #define _SEQUIT      0x0080
  263. #define _SETERMINATE 0x0100
  264. #define _SECLOSE     0x0200
  265. #define _SEMENU      0x0400
  266.  
  267. /* Editor-Kommandos
  268.  */
  269. #define _ESINIT      0x0001
  270. #define _ESOK        0x0002
  271. #define _ESACK       0x0004
  272. #define _ESCOMPILE   0x0008
  273. #define _ESMAKE      0x0010
  274. #define _ESMAKEALL   0x0020
  275. #define _ESLINK      0x0040
  276. #define _ESEXEC      0x0080
  277. #define _ESMAKEEXEC  0x0100
  278. #define _ESPROJECT   0x0200
  279. #define _ESQUIT      0x0400
  280.  
  281.  
  282. /* Die Nachricht SE_ERROR liefert einen Zeiger auf diese Struktur:
  283.  */
  284. typedef struct
  285. {
  286.  char *errFile;         /* Zeiger auf den Namen der compilierten Datei */
  287.  char *errMess;         /* Zeiger auf die Fehlermeldung                */
  288.  int errNum;            /* Die Fehlernummer                            */
  289.  long errLine;          /* Die fehlerhafte Zeile                       */
  290.  int errRow;            /* Die Spalte mit dem Fehler (oder 0)          */
  291. } ERRINFO;
  292.  
  293. /* Die Nachricht SE_MENU verwendet einen Zeiger auf diese Struktur:
  294.  */
  295. typedef struct
  296. {
  297.  char *compStr;
  298.  char *makeStr;
  299.  char *makeAllStr;
  300.  char *linkStr;
  301.  char *execStr;
  302.  char *makeExecStr;
  303.  char *progName;
  304. } SEMENUINFO;
  305.